package com.sinog.basic.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sinog.core.domain.User;
import com.sinog.core.domain.UserPosition;
import com.sinog.core.model.UserDTO;
import com.sinog.core.model.UserPositionVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

/**
 * @desc 系统管理 - 用户管理 - 用户管理 - UserMapper
 * @author hak
 * @date Created in 2019年07月
 */
public interface UserMapper extends BaseMapper<User> {

    /**
     * 系统管理 - 用户管理 - 用户管理 - 分页查询用户信息
     * @param page page
     * @param usernameKey usernameKey
     * @param orgid orgid
     * @param departid departid
     * @param loginUserDepartid loginUserDepartid
     * @return List<Map < String,Object>>
     */
    List<Map<String,String>> selectUserList(Page<Map<String,String>> page,
                                            @Param("usernameKey") String usernameKey,
                                            @Param("orgid") String orgid,
                                            @Param("departid") String departid,
                                            @Param("loginUserDepartid") String loginUserDepartid);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 删除用户
     * @param account account
     * @return int
     */
    int deleteUserByAccount(@Param("account") String account);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 根据id查询用户 获取用户基本信息 连表查询操作
     * @param account account
     * @param avatarFlag 0:不需要查询头像avatar。1：需要查询avatar
     * @return UserDTO
     */
    UserDTO selectUserByAccount(@Param("account")String account,@Param("avatarFlag")String avatarFlag);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 修改用户电话号码邮箱 更新主页右上方用户信息
     * @param account account
     * @param phone phone
     * @param email email
     * @param username username
     * @param telphone telphone
     * @return int
     */
    int updateUserInfo(
            @Param("account") String account,
            @Param("phone") String phone,
            @Param("email") String email,@Param("username") String username,@Param("telphone") String telphone);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 更新头像
     * @param account account
     * @param basefile basefile
     * @return int
     */
    int updateHeadPic(@Param("account") String account,@Param("basefile") String basefile);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 根据部门ID查询部门下全部子部门ID
     * @param departid departid
     * @return List<String>
     */
    List<String> selectAllDepartIdByDepartid(String departid);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 检查账号在用户表中的数量
     * @param account account
     * @return Long
     */
    Long checkAccount(String account);

    /**
     * 系统管理 - 用户管理 - 新增 - 校验手机号是否重复
     * @param phoneNum phoneNum
     * @return List<UserDTO>
     */
    List<UserDTO> checkPhone(String phoneNum);

    /**
     * 获取安置帮教社矫账号集合
     * @return List<Map<String,String>>
     */
    List<Map<String,String>> getSjUserAll();

    /**
     * 系统管理 - 资源管理 - 资源管理 - 加载首页导航栏菜单
     * @param account account
     * @return List<String>
     */
    List<String> selectUserRoles(@Param("account") String account);

    /**
     * 山西个性化代码 首页 - 用户信息 - 更新用户表
     * @param user user
     * @return int
     */
    int updateUserByAccount(User user);

    /**
     * 山西个性化代码 首页 - 用户信息 - 根据账号修改
     * @param userPosition userPosition
     * @return int
     */
    int updateUserPositionByAccount(UserPosition userPosition);

    /**
     * 山西个性化代码 首页 - 用户信息 - 根据账号查找
     * @param account account
     * @return UserPosition
     */
    UserPosition selectUserPositionByAccount(String account);

    /**
     * 山西个性化代码 首页 - 用户信息 - 修改 - 增加position信息
     * @param userPosition userPosition
     * @return int
     */
    int insertUserPosition(UserPosition userPosition);

    /**
     * 根据id查询用户详情 获取主页右上方用户信息
     * @param account account
     * @return UserPositionVo
     */
    UserPositionVo selectUserPositionInfo(String account);

    /**
     * 山西个性化需求 - 获取地区名称
     * @param areaCode
     * @return String
     */
    String getAreaNameByCode(String areaCode);
}